---
title: DevClient
description: A library that allows creating a development build and includes useful development tools.
sourceCodeUrl: 'https://github.com/expo/expo/tree/main/packages/expo-dev-client'
packageName: 'expo-dev-client'
iconUrl: '/static/images/packages/expo-dev-client.png'
platforms: ['android', 'ios', 'tvos']
---

import APISection from '~/components/plugins/APISection';
import { APIInstallSection } from '~/components/plugins/InstallSection';
import { ConfigPluginExample, ConfigPluginProperties } from '~/ui/components/ConfigSection';

`expo-dev-client` adds various useful development tools to your debug builds:

- A configurable launcher UI, so you can launch updates (such as from [PR previews](/develop/development-builds/development-workflows#pr-previews)) and switch between development servers without needing to recompile the native app
- Improved debugging tools (such as support for [inspecting network requests](/debugging/tools/#inspecting-network-requests))
- [A powerful and extensible developer menu UI](/debugging/tools#developer-menu)

Expo documentation refers to debug builds that include `expo-dev-client` as [development builds](/develop/development-builds/introduction/).

## Installation

<APIInstallSection hideBareInstructions />

If you are installing this in an [existing React Native app](/bare/overview/), start by installing [`expo`](/bare/installing-expo-modules/) in your project. Then, follow the instructions from [Install `expo-dev-client` in an existing React Native project](/bare/install-dev-builds-in-bare/).

## Configuration in app config

You can configure development client launcher using its built-in [config plugin](/config-plugins/introduction/) if you use config plugins in your project ([Continuous Native Generation (CNG)](/workflow/continuous-native-generation/)). The plugin allows you to configure various properties that cannot be set at runtime and require building a new app binary to take effect. If your app does **not** use CNG, then you'll need to manually configure the library.

<ConfigPluginExample>

```json app.json
{
  "expo": {
    "plugins": [
      [
        "expo-dev-client",
        {
          "launchMode": "most-recent"
        }
      ]
    ]
  }
}
```

</ConfigPluginExample>

<ConfigPluginProperties
  properties={[
    {
      name: 'launchMode',
      description: [
        'Determines whether to launch the most recently opened project or navigate to the launcher screen.',
        '* `most-recent` - Attempt to launch directly into a previously opened project and if unable to connect, fall back to the launcher screen.',
        '* `launcher` - Opens the launcher screen.',
      ].join('\n'),
      default: '"most-recent"',
    },
    {
      name: 'addGeneratedScheme',
      description: [
        'By default, `expo-dev-client` will register a custom URL scheme to open a project. Set this property to `false` to disable this scheme.',
      ].join('\n'),
      default: 'true',
    },
  ]}
/>

## TV support

- This library is only supported for TV in SDK 54 and later.
  - **Android TV**: All operations are supported, similar to an Android phone.
  - **Apple TV**: Basic operations with a local or tunneled packager are supported. Authentication to EAS and listing of EAS builds and updates is not yet supported.

## API

```js
import * as DevClient from 'expo-dev-client';
```

<APISection packageName={['expo-dev-client']} apiName="DevClient" />
